package br.gov.dataprev.treinamento.ejb.service.impl;

import javax.ejb.EJB;
import javax.ejb.Local;
import javax.ejb.Remote;
import javax.ejb.Stateless;
import javax.ejb.TransactionAttribute;
import javax.ejb.TransactionAttributeType;

import br.gov.dataprev.treinamento.ejb.dao.ProdutoDaoLocal;
import br.gov.dataprev.treinamento.ejb.excecao.ExcecaoValidacao;
import br.gov.dataprev.treinamento.ejb.modelo.Produto;
import br.gov.dataprev.treinamento.ejb.service.local.ProdutoServiceLocal;
import br.gov.dataprev.treinamento.ejb.service.remote.ProdutoServiceRemote;
import br.gov.dataprev.treinamento.ejb.util.ValidacaoUtil;
import br.gov.dataprev.treinamento.ejb.validacao.grupos.Alterar;
import br.gov.dataprev.treinamento.ejb.validacao.grupos.Incluir;
import br.gov.dataprev.treinamento.ejb.validacao.grupos.PK;

@Stateless(mappedName=ProdutoServiceRemote.EJB_NAME)
@TransactionAttribute(TransactionAttributeType.REQUIRED)
@Remote(ProdutoServiceRemote.class)
@Local(ProdutoServiceLocal.class)
public class ProdutoServiceImpl implements ProdutoServiceRemote, ProdutoServiceLocal {
	
	@EJB
	private ProdutoDaoLocal ProdutoDao;

	public Produto incluir(Produto produto) throws ExcecaoValidacao {
		ValidacaoUtil.getInstance().validar(produto, Incluir.class);
		return ProdutoDao.incluir(produto);
	}

	public Produto excluir(Produto produto) throws ExcecaoValidacao {
		ValidacaoUtil.getInstance().validar(produto, PK.class);
		return ProdutoDao.excluir(produto);
	}
	
	public Produto alterar(Produto produto) throws ExcecaoValidacao {
		ValidacaoUtil.getInstance().validar(produto, Alterar.class);
		return ProdutoDao.alterar(produto);
	}
	
	@TransactionAttribute(TransactionAttributeType.SUPPORTS)
	public Produto obterCliente(Long id){
		return ProdutoDao.obterProduto(id);		
	}
	
}
